接續前一天的文章,利用Comparator製作更客製化的排序,排序條件:品牌不同就用品牌排序,品牌相同就比 RAM。
ComparatorRunner.java
package Geeks;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class ComparatorRunner {
	public static void main(String[] args) {
		List<Laptop> laps = new ArrayList<>();
		laps.add(new Laptop("MSI", 10, 1000));
		laps.add(new Laptop("Asus", 16, 12000));
		laps.add(new Laptop("Sony", 8, 600));
		laps.add(new Laptop("Lenovo", 6, 900));
		laps.add(new Laptop("Asus", 8, 1200));
		
		// 更客製化的排序
		Comparator<Laptop> brandThenRamComparator = (l1, l2) -> {
			int brandResult = l1.getBrand().compareTo(l2.getBrand());
            
			if (brandResult != 0) {
				return brandResult; // 品牌不同就用品牌排序
			}
			return l1.getRam() - l2.getRam(); // 品牌相同就比 RAM
		};
		Collections.sort(laps, brandThenRamComparator);
		
		for (Laptop l2 : laps) {
			System.out.println(l2);
		}
	
	}
}
Laptop.java
package Geeks;
import java.util.Comparator;
public class Laptop{
	private String brand;
	private int ram;
	private int price;
	public String getBrand() {
		return brand;
	}
	public void setBrand(String brand) {
		this.brand = brand;
	}
	public int getRam() {
		return ram;
	}
	public void setRam(int ram) {
		this.ram = ram;
	}
	public int getPrice() {
		return price;
	}
	public void setPrice(int price) {
		this.price = price;
	}
	@Override
	public String toString() {
		return "Laptop [brand=" + brand + ", ram=" + ram + ", price=" + price + "]";
	}
	// 加上建構子,才可以在ComparableRunner.java使用new Laptop("Apple",8,1200)等
	public Laptop(String brand, int ram, int price) {
		super();
		this.brand = brand;
		this.ram = ram;
		this.price = price;
	}
}